package tools.ObjetoDistribuido;

import tools.command.commandInterface.*;


/**
 * @author rapha
 * Pacote para definir funções em comum de objetos distribuidos
 *
 */
public abstract class ObjetoDistribuido{
	/**
	 * @param tipo - Tipo do objeto 
	 * Função abstrata para definir qual é o tipo do objeto distribuido
	 */
	public abstract void setTipo(String tipo);
	/**
	 * @return Tipo do objeto
	 * Função abstrata com o objetivo de retornar o tipo do objeto
	 */
	public abstract String getTipo();
	/**
	 * Função abstrata com o objetivo de fechar as conexões ativas
	 */
	public abstract void fecha();
	/**
	 * @param cmd - Comando a ser enviado no canal 
	 * Função abstrata com o intuito de enviar um comando pelo canal
	 */
	public abstract void escreve(Command cmd);
	/**
	 * @param cmd - Comando a ser recebido no canal
	 * Função abstrata com o intuito de receber um commando pelo canal
	 */
	//public abstract void recebe(Command cmd, ObjetoDistribuido obj);
	public abstract void recebe();
	/**
	 * Função abstrata para informar como utilizar o objeto distribuido
	 */
	public abstract void usage();
	/**
	 * @return Porto utilizado pelo objeto distribuido
	 * Função abstrata com o intuito de informar qual porto o objeto distribuido utiliza
	 */
	public abstract int getPort();
	/**
	 * @param port - Porto a ser utilizado pelo objeto distribuido
	 * Função abstrata com o intuito de atribuir um porto a ser utilizado pelo objeto distribuido
	 */
	public	abstract void setPort(int port);
}
